package com.tl.libpay.abc;

import android.app.Activity;
import android.content.Intent;
import android.text.TextUtils;
import android.widget.Toast;

import com.example.caller.BankABCCaller;
import com.tl.libmanager.PayEntrance;
import com.tl.libpay.ui.PayHelper;

import java.util.HashMap;

/**
 * @author JongSung
 * @Description 农行支付逻辑
 * @date 2017/8/24 0022
 */
public class PayABC {
    static final String KEY_RESULT = "from_bankabc_param";
    static final String KEY_PAY_STATUS = "STT";
    static final String KEY_PAY_MSG = "Msg";
    static final String KEY_PAY_TOKEN_ID = "TokenID";

    /**
     * 调起农行支付
     *
     * @param context 上下文
     * @param tokenID 支付订单号
     */
    public static final void pay(Activity context, String tokenID) {
        if (BankABCCaller.isBankABCAvaiable(context)) {
            BankABCCaller.startBankABC(context, context.getPackageName(), context.getComponentName().getClassName(), "pay", tokenID);
        } else {
            Toast.makeText(context, "没有安装农行掌上银行，或农行掌上银行版本不支持该操作", Toast.LENGTH_LONG).show();
        }
    }

    /**
     * 农行客户端返回后接收处理结果
     * 9999 支付未完成
     * 0000 支付成功
     * PA500401 已存在成功支付的订单
     * <p>
     * 注意：接收的intent对应的Activity设置如下：
     * android:exported = "true"
     *
     * @param intent
     * @param listener
     */
    public static boolean payResult(Intent intent, PayEntrance.PayListener listener) {
        if (intent != null) {
            String extra = intent.getStringExtra(KEY_RESULT);
            if (extra == null) {
                return false;
            }
            String[] params = extra.split("&");
           /* if (params == null) {
                return;
            }*/
            String keyValueStr = null;
            String[] keyAndValue;
            HashMap<String, String> resultMap = new HashMap<>();
            for (int i = 0; i < params.length; i++) {
                keyValueStr = params[i];
                if (!TextUtils.isEmpty(keyValueStr)) {
                    keyAndValue = keyValueStr.split("=");
                    if (keyAndValue != null && keyAndValue.length == 2) {
                        if (keyAndValue[0] != null) {
                            resultMap.put(keyAndValue[0].trim(), keyAndValue[1].trim());
                        }
                    }
                }
            }
            if (resultMap.containsKey(KEY_PAY_STATUS)) {
                String status = resultMap.get(KEY_PAY_STATUS);
                if ("0000".equals(status)) {
                    listener.onSuccess(PayHelper.PAY_TYPE_ABC);
                } else {
                    listener.onFailed(PayHelper.PAY_TYPE_ABC, status, resultMap.get(KEY_PAY_MSG));
                }
                return true;
            }
        }
        return false;
    }

}
